package main

import (
	"fmt"
	"os"
)

var (
	minValue int       // 最小值
	maxValue int       // 最大值
	Length   int       // 生成的随机数个数
	seed     int64 = 1 // 用于复现的种子值
)

func main() {
	fmt.Println(`************************************************************************
* 本程序在您输入的最大最小值范围内随机产生输入个数的随机数列           *
* 数列中数字不会重复，所以最大值与最小值之差必须大于等于随机数个数     *
* 复现标识数一致时则输出的数列一致。                                   *
************************************************************************`)

	doRandomQueue()
}

func doRandomQueue() {
	getInput(&minValue, "请输入最小值：", "输入有误，请重新输入！")
	getInput(&maxValue, "请输入最大值：", "输入有误，请重新输入！")
	getInput(&Length, "请输入随机数个数：", "输入有误，请重新输入！")
	getInput(&seed, "请输入复现标识数：", "输入有误，请重新输入！")

	if maxValue-minValue < Length {
		fmt.Println("!!!错误：最大值与最小值之差必须大于等于随机数个数.")
		fmt.Println("****************重新输入****************")
		doRandomQueue()
		return
	}

	Initialize(minValue, maxValue, Length, seed)
	GetRandomQueue().Print()

	fmt.Print("\n\n输入q退出程序，输入r重新执行程序：")
	exit := ""
	for {
		if _, err := fmt.Scanln(&exit); err == nil {
			if exit == "q" {
				os.Exit(0)
			} else if exit == "r" {
				doRandomQueue()
			}
		}
	}
}

func getInput(v any, beforeMsg, errMsg string) {
	fmt.Println(beforeMsg)
	for {
		if _, err := fmt.Scanln(v); err != nil {
			fmt.Println(errMsg)
			_, _ = fmt.Scanln() // 消费掉 fmt.Println(errMsg) 的输出
		} else {
			return
		}
	}
}
